/*
 * Copyright (c)  2017
 * All rights reserved.
 * ProductInfo.java 2017-09-13 下午7:47
 */

package com.ueboot.weishop.entity.goods;

import com.ueboot.weishop.entity.IDEntity;
import com.ueboot.weishop.entity.activity.ActivityEntity;
import com.ueboot.weishop.entity.setting.BrandEntity;
import com.ueboot.weishop.entity.setting.CategoryEntity;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.ColumnTransformer;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Type;

import javax.persistence.*;


/**
 * 描述:商品基本信息表
 *
 * @author yangkui create on 2017-09-13 下午7:47.
 * @since 1.0
 */
@Data
@NoArgsConstructor
@Entity(name = "WS_GOODS_INFO")
public class  GoodsInfoEntity extends IDEntity {

    public static final Integer GIFT_0 = 0;
    public static final Integer GIFT_1 = 1;
    /**
     * 图片地址分隔符
     */
    public static final String IMG_URL_SPLIT_CHAR=",";
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "WS_GOODS_INFO")
    @GenericGenerator(name = "WS_GOODS_INFO", strategy = "enhanced-table", parameters = {
            @org.hibernate.annotations.Parameter(name = "table_name", value = "WS_TABLE_SEQUENCE"),
            @org.hibernate.annotations.Parameter(name = "segment_value", value = "WS_GOODS_INFO"),
            @org.hibernate.annotations.Parameter(name = "optimizer", value = "pooled") })
    @Column(name = "ID",columnDefinition = "INT(20) COMMENT 'id主键'",length = 20)
    private Long id;

    /**
     * 商品名称
     */
    @Column(name = "NAME",columnDefinition = "VARCHAR(200) COMMENT '商品名称'",length = 200)
    private String name;

    /**
     * 品牌名称（冗余字段）
     */
    @Column(name = "BRAND_NAME",columnDefinition = "VARCHAR(200) COMMENT '品牌名称'",length = 200)
    private String brandName;

    /**
     * 所属分类名称
     */
    @Column(name = "CATEGORY_NAME",columnDefinition = "VARCHAR(200) COMMENT '所属分类名称'",length = 200)
    private String categoryName;
    /**
     * 高亮词，用于商品名称前缀的高亮显示
     */
    @Column(name = "HIGH_LIGHT_WORD",columnDefinition = "VARCHAR(40) COMMENT '高亮词，用于商品名称前缀的高亮显示'",length = 40)
    private String highLightWord;

    /**
     * 商品主图地址
     */
    @Column(name = "MAIN_IMG_URL",columnDefinition = "VARCHAR(200) COMMENT '商品主图地址'",length = 200)
    private String mainImgUrl;


    /**
     * 自定义标签，额外的附加属性.如：超高效率
     */
    @Column(name = "TAGS",columnDefinition = "VARCHAR(200) COMMENT '自定义标签，额外的附加属性'",length = 200)
    private String tags;
    /**
     * 简短描述，用于商品详情页面展示时，额外的描述信息。宝贝卖点说明
     */
    @Column(name = "SHORT_DESC",columnDefinition = "VARCHAR(2000) COMMENT '简短描述，用于商品详情页面展示时，额外的描述信息。宝贝卖点说明'",length = 2000)
    private String shortDesc;

    /**
     * 商品原始价格,如果没有多个不同规格的价格，这里的就是商品的价格。
     * 与minPrice和maxPrice存在互斥关系。
     * 分为单位
     */
    @Column(name = "ORIGINAL_PRICE",columnDefinition = "int(11) COMMENT '商品原始价格,如果没有多个不同规格的价格，这里的就是商品的价格'",length = 11)
    private Integer originalPrice;

    /**
     * 商品最小价格，分为单位。当存在多个规格不同的价格时这里保存最小值和最大值。
     */
    @Column(name = "MIN_PRICE",columnDefinition = "INT(11) COMMENT '商品最小价格，分为单位。当存在多个规格不同的价格时这里保存最小值和最大值'",length = 11)
    private Integer minPrice;
    /**
     * 商品最大价格，分为单位
     */
    @Column(name = "MAX_PRICE",columnDefinition = "INT(11) COMMENT '商品最大价格，分为单位'",length = 11)
    private Integer maxPrice;

    /**
     * 商品介绍，详细信息，包含HTML代码
     */
    @Column(name = "DETAIL_DESC",columnDefinition = "VARCHAR(2000) COMMENT '商品介绍，详细信息，包含HTML代码'",length = 2000)
    private String detailDesc;


    /**
     * 是否上架，上架才能允许被搜索到和进行交易
     */
    @Column(name = "MARKETABLE",columnDefinition = "INT(1) COMMENT '是否上架'",length = 1)
    @Type(type= "org.hibernate.type.NumericBooleanType")
    private Boolean marketable =Boolean.TRUE;

    /**
     * 是否为赠品，赠品的商品不能被单独购买和搜索。1 是，0 否
     */
    @Column(name = "GIFT",columnDefinition = "INT(1) COMMENT '是否为赠品，赠品的商品不能被单独购买和搜索'",length = 1)
    private Integer gift;
    /**
     * 销售区域，如果为全国统一价，则购买页面不出现销售区域选择功能，否则显示选择功能。
     * 查询具体的价格时，销售区域的ID拼装在最后面。
     */
    @Column(name = "SALE_REGION",columnDefinition = "VARCHAR(20) COMMENT '销售区域'",length =10)
    private String saleRegion;

    /**
     * 库存（总库存），每种规格有额外的库存数量
     */
    @Column(name = "STOCK",columnDefinition = "INT(11) COMMENT '库存（总库存），每种规格有额外的库存数量'",length = 11)
    private Integer stock;

    /**
     * 库存备注说明
     */
    @Column(name = "STOCK_MEMO",columnDefinition = "VARCHAR(2000) COMMENT '库存备注说明'",length = 2000)
    private String stockMemo;


    /**
     * 搜索关键字（用于索引使用）
     */
    @Column(name = "SEARCH_KEY_WORD",columnDefinition = "VARCHAR(200) COMMENT '搜索关键字（用于索引使用）'",length = 200)
    private String searchKeyWord;
    /**
     * 商品类型：实物|虚拟物品 类型通过分类自动获取
     * 针对实物需要进行配送服务，需要用户填写收货地址
     */
    @Column(name = "GOODS_TYPE",columnDefinition = "VARCHAR(40) COMMENT '商品类型：实物|虚拟物品 类型通过分类自动获取'",length = 40)
    private String goodsType;


    /**
     * 所属品牌
     */
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="BRAND_ID",columnDefinition = "INT(20) COMMENT '所属品牌'")
    private BrandEntity brand;
    /**
     * 所属分类
     */
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="CATEGORY_ID",columnDefinition = "INT(20) COMMENT '所属分类'")
    private CategoryEntity category;
    /**
     * 所属活动
     */
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="ACTIVITY_ID",columnDefinition = "INT(20) COMMENT '所属活动'")
    private ActivityEntity activity;

    /**
     * 所属活动ID集合，使用/分割。
     */
    @Column(name = "ACTIVITY_FULL_PATH_IDS",columnDefinition = "VARCHAR(40) COMMENT '所属活动ID集合，使用/分割。'",length = 40)
    private String activityFullPathIds;

    /**
     * 所属活动名称集合，使用/分割.
     */
    @Column(name = "ACTIVITY_FULL_PATH_NAME",columnDefinition = "VARCHAR(40) COMMENT '所属活动名称集合，使用/分割.'",length = 200)
    private String activityFullPathName;

}